home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / intel / 8259.lzh / 8259.TXT
Text File  |  1986-01-26  |  6KB  |  125 lines

  1.                  The 8259 Interrupt Controller
  2.  
  3.    The 8259 Interrupt Controller chip provides a vital support service for the
  4. central processor (8088). We have already seen how external events can be
  5. signaled to the central processor via its interrupt mechansim. In a typical
  6. Personal Computer system, such interrupt signals can originate from several
  7. different places (i.e. keyboard,disk drive,etc.). The 8088, however,
  8. has only one input line on which to receive an interrupt signal. The 8259
  9. chip is therefore employed to manage the various interrupt sources and 
  10. present a single, controllable interrupt signal to the central processor.
  11.  
  12.    As configured for use in the PC, the 8259 chip can accept up to eight
  13. independent signals, numbered 0 through 7. For each interrupt 
  14. it receives, the 8259 can present an interrupt signal to the 8088. Furthermore
  15. it presents to the 8088 a unique interrupt type code for each of the
  16. eight interrupt sources. This allows us to assign a unique interrupt-service
  17. routine to each different interrupt source. The eight signal inputs to the
  18. 8259 are wired onto the control bus so that any device tied into the bus
  19. system can access this interrupt mechansim. On the control bus, the signals 
  20. are named IRQ0 through IRQ7.
  21.  
  22.    Because each signal is independent, provision must be made for the pos-
  23. siblity of two or more signals occurring at the same time. The 8259 manages
  24. such an event by holding on to the secondary interrupt(s) while the
  25. processor services the first. When that interrupt has been serviced, the
  26. next one is signaled to the processor. For events that occur at exactly the
  27. same moment, the 8259 passes them to the processor in a priority order,
  28. where interrupt source 0 has the highest priority and interrupt source 7
  29. has the lowest. One very important consequence of this scheme is that the
  30. processor (8088) must indicate to the controller (8259) when it has com-
  31. pleted the servicing of each interrupt. This must be kept in mind whenever
  32. an interrupt-service routine is written.
  33.  
  34.    Because it has been designed for use in many different applications, the
  35. 8259 is an extremely complex chip. Fortunately for us, however, most of
  36. this complexity is handled by the BIOS, which programs the proper config-
  37. uration information into the 8259 on power-up. The 8259 is thus configured 
  38. to signal interrupt type codes 08H-0FH to correspond with interrupt
  39. sources 0-7. The standard device allocations for each of these
  40. interrupt sources are listed in Table 5-3. Note that the two highest-priority
  41. interrupts, IRQ0 and IRQ1, are wired directly on the system board. The
  42. rest of the interrupt sources are obtained from adapter cards plugged into 
  43. the expansion slots.
  44.  
  45.    From our point of view, programming the 8259 consists of two basic
  46. actions. See Fig. 5-3. First, we can enable or disable each interrupt source
  47. independently by writing a value into the interrupt mask register, or IMR.
  48. The IMR is a one-byte register within the 8259 that we can access via I/O
  49. port 21H. Each bit in the IMR corresponds to the interrupt source with its
  50. bit number (i.e. bit 0-IRQ0,bit 1-IRQ1,etc). If a bit in the IMR is 0, then
  51. its corresponding interrupt source in enabled. A signal appearing on that
  52. input to the 8259 will cause an interrupt to be sent to the 8088. If the IMR
  53. bit is 1, then the interrupt source is disabled (or masked) and cannot gen-
  54. erate an interrupt. For example, suppose we wish to disable interrupts
  55. from all devices except the keyboard. This would be accomplished as follows:
  56.         MOV    AL,0FDH
  57.         OUT    21H,AL
  58. Keep in mind that the state of the interrupt flag within the 8088 will 
  59. ultimately determine whether or not any interrupt signal is received.
  60.  
  61.    The second 8259 programming action that we must be concerned with is
  62. the signaling of the end of an interrupt service routine. This is
  63. accomplished by sending the "end of interrupt" (EOI) command, represented by
  64. 20H, to the interrupt command register within the 8259. Coincidentally,
  65. this one-byte register is accessed via I/O port 20H. That is all there is to
  66. controlling the interrupt mechanism.
  67.  
  68.  
  69.                Table 5-3. Interrupt Sources
  70.  
  71.    8259 Input          Type Code                        Device
  72.  
  73.      IRQ0                 08H                       Timer (Channel 0)
  74.      IRQ1                 09H                Keyboard
  75.      IRQ2                 0AH                       Color Graphics Interface
  76.      IRQ3                 0BH                       Unused
  77.      IRQ4                 0CH                       Serial (RS-232) Interface
  78.      IRQ5                 0DH                       Unused
  79.      IRQ6                 0EH                       Diskette
  80.      IRQ7                 0FH                       Printer
  81.  
  82.  
  83.  
  84.  
  85.              Fig. 5-3. Controlling the Interrupt Mechanism
  86.  
  87.         IF        Interrupt Flag, within 8088
  88.             IF=0: All interrupts disabled (use cli instruction).
  89.             IF=1: Interrupts enabled (use sti instruction).
  90.  
  91.     7  6  5  4  3  2  1  0          Interrupt Mask Register
  92.         |  |  |  |  |  |  |  |           IMR Bit=0: IRQ enabled
  93.         |  |  |  |  |  |  |  IRQ0     IMR Bit=1: IRQ disabled
  94.         |  |  |  |  |  |  IRQ1        Set IMR with MOV  AL,xyz
  95.         |  |  |  |  |  IRQ2                        OUT  21H,AL
  96.         |  |  |  |  IRQ3
  97.         |  |  |  IRQ4
  98.         |  |  IRQ5
  99.         |  IRQ6
  100.         IRQ7
  101.  
  102.  
  103.                       Interrupt Command Register
  104.                       Signal end of interrupt by sending
  105.                       EOI command: MOV AL,20H
  106.                            OUT 20H,AL
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.